package ricky.game.action
{
	import flash.geom.Point;
	
	import ricky.Interface.IAct;
	import ricky.Interface.IDispose;
	import ricky.game.Actor;
	import ricky.utils.FrameManager;

	/**
	 * 角色行动
	 * 不要在actEnd里调用dispose方法
	 */
	public class Act implements IAct,IDispose
	{

		public function Act(actor:Actor=null)
		{
			this._actor=actor;
		}
		
		/**
		 * 添加act到逻辑帧管理器
		 */
		protected function addLogic():void
		{
			FrameManager.inst.addLogic(this);
		}
		
		/**
		 * 从逻辑帧管理器删除此act
		 */
		protected function removeLogic():void
		{
			FrameManager.inst.removeLogic(this);
		}
		
		/**
		 * 开始行动初始化
		 */
		public function begin():void
		{

		}

		/**
		 * 这里写行动的逻辑
		 */
		public function action(timeline:Number):void
		{
			
		}
		
		/**
		 * 行动目的
		 */
		public function purpose(args:*):void
		{
			
		}
	
		/**
		 * 结束行动
		 */
		public function end():void
		{
		}
			
		/**
		 * 行动完成
		 * 如果行动没有达到目标可以重写此方法
		 * 在此方法内把_next和_effectNext设置成null
		 */
		public function complete():void
		{
			if(this._completeFun!=null)
				_completeFun(this);
		}

		
		/**
		 * 行动结束 响应函数
		 * 	@param function(act:Act):void 
		 */
		public function get completeFun():Function
		{
			return _completeFun;
		}

		/**
		 * @private
		 */
		public function set completeFun(value:Function):void
		{
			_completeFun = value;
		}

		/**
		 * @private
		 */
		public function set actor(value:Actor):void
		{
			_actor = value;
		}

		/**
		 * 行动类型
		 */
		public function get types():int
		{
			return _types;
		}

		
		/**
		 *  开始新的行动前 销毁上个行动 
		 *  注意：无需再act类中调用dispose();
		 */
		public function dispose():void
		{
			_actor=null;
			_completeFun=null;

		}
		
		protected var _completeFun:Function;
		
		protected var _actor:Actor;//行动的主体

		protected var _types:int;
		
		/**
		 * 标准动作站立
		 */
		public static var stand:String="stand";
		
//		public function toString():String
//		{
//			if(this._actor)
//				return "name=["+this._actor.name+"]act=["+this+"]"+this._types;
////			else
////				return "act="+this.animProperty;
//		}

		
	}
}